package cn.zhaozhiqi.controller;

import cn.zhaozhiqi.domain.Teacher;
import cn.zhaozhiqi.service.ITeacherService;
import cn.zhaozhiqi.util.ExcelUtil;
import cn.zhaozhiqi.util.R;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

@RestController
@RequestMapping("/common")
public class CommonController {

    // 获取配置文件中的文件上传路径
    @Value("${file.file-path}")
    private String filePath;

    @Autowired
    ITeacherService iTeacherService;

    /**
     *
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    public R upload(@RequestParam("file") MultipartFile file) throws
            IOException {
        // 1.获取文件原名
        String originalFilename = file.getOriginalFilename();
        // 2.生成新的文件名，避免文件名称重复
        String fileName = System.currentTimeMillis() + "_" + originalFilename;
        // 3.组合文件上传路径
        String uploadUrl = filePath + fileName;
        // 4.根据路径创建文件，如果不存在则创建
        File fileTmp = new File(uploadUrl);
        if (!fileTmp.exists()){
            fileTmp.mkdirs();
        }
        // 5.将文件保存到指定路径
        file.transferTo(fileTmp);
        // 6.响应
        return R.ok("上传成功！");
    }

    /**
     *
     * @param fileName
     * @param response
     * @return
     * @throws IOException
     */
    @GetMapping("/download")
    public R<Void> download(String fileName, HttpServletResponse response) throws
            IOException {
        // 1.设置响应头，告诉浏览器文件下载的名字，附件表示做下载或上传操作
// attachment:告诉浏览器，以弹框的方式打开我的附件
        response.setHeader("Content-Disposition", "attachment; filename=" +
                fileName);
        // 2.根据前端传递的文件名称拼接上服务器文件地址
        String fileUrl = filePath + fileName;
        // 3.根据路径创建文件对象
        File file = new File(fileUrl);
        // 4.将文件转换为输入流
        FileInputStream fileInputStream = new FileInputStream(file);
        // 5.从响应对象中获取到输出流对象
        ServletOutputStream outputStream = response.getOutputStream();
        // 6.使用Apache的文件操作工具IOUtil进行文件拷贝
        IOUtils.copy(fileInputStream, outputStream);
        // 7.响应
        return R.ok("上传成功！");
    }





}
